
class IM68KEventListener abstract {
	public:
		virtual void M68K_IrqAck(ICpu* cpu) = NULL;
		virtual void M68K_BkptAck(ICpu* cpu, UINT32 data) = NULL;
		virtual void M68K_ResetAck(ICpu* cpu) = NULL;
		virtual void M68K_Cmpild(ICpu* cpu, UINT32 data, UINT8 reg) = NULL;
		virtual void M68K_Rte(ICpu* cpu) = NULL;
		virtual int M68K_Tas(ICpu* cpu) = NULL;
};

class CM68000 : public CBaseCPU, public CM68KEventListener_Internal {
	protected:
		m68ki_cpu_core* cpu;
		IM68KEventListener* event_listener;

	public:
		 void M68K_IrqAck();
		 void M68K_BkptAck(UINT32 data);
		 void M68K_ResetAck();
		 void M68K_Cmpild(UINT32 data, UINT8 reg);
		 void M68K_Rte();
		 int M68K_Tas();

	public: // Stuff unique to our class
		void HookM68KEventListener(IM68KEventListener* listener);

	public: // ICpu
		virtual int Init(int clock); // Overridden through other cores, so it's left virtual. The rest are static
		int Exec(int cycles);
		void Reset();
		void AssignMMU(int slot, CBaseMMU* mmu);
		void Interrupt(int line, int state);
		void Interrupt(int line, int state, int vector);
};